#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "stack.h"
#include <string.h>
void PrintArray(int* a, int n);
void InsertSort(int* a, int n);
void ShellSort(int* a, int n);
// 选择排序
void SelectSort(int* a, int n);

// 堆排序
void AdjustDown(int* a, int n, int root);
void HeapSort(int* a, int n);

// 冒泡排序
void BubbleSort(int* a, int n);
int GetMid(int* a, int left, int right);
// 快速排序递归实现
// 快速排序hoare版本
int PartSort1(int* a, int left, int right);
// 快速排序挖坑法
int PartSort2(int* a, int left, int right);
// 快速排序前后指针法
int PartSort3(int* a, int left, int right);
void QuickSort(int* a, int left, int right);

// 快速排序 非递归实现
void QuickSortNonR(int* a, int left, int right);

void QuickSortNonR(int* a, int begin, int end);

void MergeSort(int* a, int* tmp, int begin, int end);

void MergeSortNonR(int* a, int n);

void CountSort(int* a, int n);